<?php

/**
 * @author PeoneEr
 * @package aion personal cabinet v1.0
 * @copyright Aion Factory Inc. 2010-2011
 * @license GNU v3
 * @link Ai-Factory.ru && http://code.google.com/p/aionprivateofficev2
 */
require_once "core/application/models/mrequests/mrequests.php";
require_once "core/application/controllers/cusers.php";

class requests_Controller extends Requests_Model {

    /**
     *
     * @var static $_instance
     * @var array $_params
     * @var object $_lang
     */
    private static $_instance = NULL;
    private $_params       = array();
    public $_lang             = NULL;

    public static function getInstance() {
        if (is_null(self::$_instance)) {
            $class = __CLASS__;
            self::$_instance = new $class();
        }
        return self::$_instance;
    }

    public function countRequests() {
        /**
         * кол-во запросов
         */
        return $this->getCountRequests();
    }

    public function returnfullListRequestsShow() {
        /**
         * полный список запросов
         */
        return $this->getFullList();
    }

    public function returnName($id) {
        /**
         * возвращает имя отправителя
         * @param int $id
         */
        return mysql_fetch_assoc($this->getNameSenderRequests($id));
    }

    public function returnOneRecord($id) {
        /**
         *  возвращает одну запись
         * @param int $id
         */
        return mysql_fetch_assoc($this->getRecord($id));
    }

    public function setStatusDefault($status, $id) {
	/**
	 *  устанавливает статус, без дополнительных условий
	 * @param int $status
	 * @param int $id
	 */
	 if (!is_numeric($status) || $status < 0 || $status > 2) {
			$this->echoError("Значение статуса должно быть только числом в интвервале от 0 до 2");
	}
        try {
            $this->updateRequest($status, $id);
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    public function setNewStatusRequest($status) {
        /**
         *  устанавливает новый статус
         * @param string $status
         */
        switch ($status) {
            case "accept":
                    Players_Controller::getInstance()->addToFriendList();
                break;
            case "decine":
                if ($this->updateRequest("2", $_GET['id']))
                    $this->echoSuccess("Заявка отклонена");
                break;
        }
    }

    public function insertNewRecord() {
        /**
         * запись нового запроса
         */
        $this->_lang = $this->getLanguage();
		/**
		 *  массив параметров
		 *
		 */
        $this->_params = array(
            'from' => $_SESSION['name'],
            'toId' => $_POST['account_id'],
            'friend' => $_POST['friendNick'],
            'char' => $_POST['myChar']
        );
		
		if (players_Controller::getInstance()->charsOnOneAccount($this->_params['friend'])) {
			$this->echoError("Добавить в друзья персонажа со своего же аккаунта невозможно");
		}
        /*if ($this->issetRequest($this->_params['char'], $this->_params['friend'])) {
            $this->echoError("Вы уже отправляли предложение");
        }*/
		/**
		 *  изменил часть кода. если предложение уже было отправлено - оповещается об этом
		 *  если предложение ещё не было одобрено - оповещаем об этом
		 *  все просто
		 * @var array $aux_fetch
		 */
		$aux_fetch = $this->issetRequest($this->_params['char'], $this->_params['friend']);
		if ($aux_fetch['status'] == '0') {
			$this->echoError("Вы уже отправляли предложение. Дождитесь ответа");
		}
		if ($aux_fetch['status'] == '2' || $aux_fetch['status'] == '1') {
			$this->echoError("Ваше предложение уже было принято или отклонено. Повторно отправлять смысла нет.");
		}
		
		if (is_null($aux_fetch)) {
			error::getInstance($this->_lang->language['defaultError']);
		}
		//уничтожение вспомогательной переменной, она сделала свое дело
		unset($aux_fetch);
		
        if ($this->issetFriend($this->getSelfPlayerId($this->_params['char']), $this->getFriendPlayerId($this->_params['friend']))) {
            $this->echoError("Этот игрок уже является Вашим другом 
			<br /> Подыщите себе другого друга");
			$this->updateRequest("2", $_GET['id']);
        }
        try {
            $this->insertNewRequest($this->_params['from'], $this->_params['toId'], $this->_params['char'], $this->_params['friend']);
            $this->echoSuccess("
                Ваша заявка на добавление персонажа " . $this->_params['friend'] . " в друзья подана 
                    <br />
                Дождитесь, пока Ваша заявка будет одобрена или отклонена");
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance($this->_lang->language['defaultError']);
        }
        unset($this->_params);
    }

}

?>
